package imagesBuffer;

import imageViewer.ImageReloader;

public class ImageStateChangerRunnable implements Runnable{
	private BufferableBitmap bitmap;
	private ImageState state;
	private ImageReloader reloader;
	private static int runningCount=0;
	
	/**
	 * lancia un thread che carica l'immagine in memoria
	 * @param bitmap immagine di cui deve essere cambiato lo stato
	 * @param state determina come l'immagine deve essere caricata in memoria
	 * @param reloader utilizzatore dell'immagine
	 */
	public static void changeImageState(BufferableBitmap bitmap,ImageState state,
			ImageReloader reloader){
		ImageStateChangerRunnable runnable=new ImageStateChangerRunnable(bitmap, state,reloader);
		Thread secondThread=new Thread(runnable);
		secondThread.start();
	}
	
	
	/**
	 * @param bitmap immagine di cui deve essere cambiato lo stato
	 * @param state determina come l'immagine deve essere caricata in memoria
	 * @param reloader utilizzatore dell'immagine
	 */
	public ImageStateChangerRunnable(BufferableBitmap bitmap,ImageState state,
			ImageReloader reloader) {
		this.bitmap=bitmap;
		this.state=state;
		this.reloader=reloader;
	}
	
	/**
	 * carica l'immagine e notifica il reloader che un immagine ha cambiato stato
	 */
	@Override
	public synchronized void run() {
		runningCount++;
		bitmap.changeState(state);
		if(bitmap.isChanged()){
			reloader.reloadImages();
		}
		runningCount--;
	}
	
	/**
	 * @return numero di thread lanciati da changeImageState
	 */
	public static int getRunningCount() {
		return runningCount;
	}
}
